home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 101-125 / disk_114 / cdecl / cdlex.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  14KB  |  903 lines

  1. #ifdef unix
  2. # include "stdio.h"
  3. #endif
  4. # define U(x) x
  5. # define NLSTATE yyprevious=YYNEWLINE
  6. # define BEGIN yybgin = yysvec + 1 +
  7. # define INITIAL 0
  8. # define YYLERR yysvec
  9. # define YYSTATE (yyestate-yysvec-1)
  10. # define YYOPTIM 1
  11. # define YYLMAX 200
  12. # define output(c) putc(c,yyout)
  13. # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
  14. # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
  15. # define yymore() (yymorfg=1)
  16. # define ECHO fprintf(yyout, "%s",yytext)
  17. # define REJECT { nstr = yyreject(); goto yyfussy;}
  18. int yyleng; extern char yytext[];
  19. int yymorfg;
  20. extern char *yysptr, yysbuf[];
  21. int yytchar;
  22. FILE *yyin = {stdin}, *yyout = {stdout};
  23. extern int yylineno;
  24. struct yysvf { 
  25.     struct yywork *yystoff;
  26.     struct yysvf *yyother;
  27.     int *yystops;};
  28. struct yysvf *yyestate;
  29. extern struct yysvf yysvec[], *yybgin;
  30. #include <ctype.h>
  31.  
  32. char *visible();
  33. # define YYNEWLINE 10
  34. yylex(){
  35. int nstr; extern int yyprevious;
  36. while((nstr = yylook()) >= 0)
  37. yyfussy: switch(nstr){
  38. case 0:
  39. if(yywrap()) return(0); break;
  40. case 1:
  41.     return ARRAY;
  42. break;
  43. case 2:
  44.         return AS;
  45. break;
  46. case 3:
  47.     return CAST;
  48. break;
  49. case 4:
  50.     return DECLARE;
  51. break;
  52. case 5:
  53.     return EXPLAIN;
  54. break;
  55. case 6:
  56. return FUNCTION;
  57. break;
  58. case 7:
  59.     return HELP;
  60. break;
  61. case 8:
  62.     return INTO;
  63. break;
  64. case 9:
  65.         return OF;
  66. break;
  67. case 10:
  68.     return POINTER;
  69. break;
  70. case 11:
  71. return RETURNING;
  72. break;
  73. case 12:
  74.         return TO;
  75. break;
  76. case 13:
  77.     { yylval.dynstr = ds(yytext); return CHAR; }
  78. break;
  79. case 14:
  80.     { yylval.dynstr = ds(yytext); return DOUBLE; }
  81. break;
  82. case 15:
  83.     { yylval.dynstr = ds(yytext); return STRUCTUNION; }
  84. break;
  85. case 16:
  86.     { yylval.dynstr = ds(yytext); return FLOAT; }
  87. break;
  88. case 17:
  89.         { yylval.dynstr = ds(yytext); return INT; }
  90. break;
  91. case 18:
  92.     { yylval.dynstr = ds(yytext); return LONG; }
  93. break;
  94. case 19:
  95.     { yylval.dynstr = ds(yytext); return SHORT; }
  96. break;
  97. case 20:
  98.     { yylval.dynstr = ds(yytext); return STRUCTUNION; }
  99. break;
  100. case 21:
  101.     { yylval.dynstr = ds(yytext); return STRUCTUNION; }
  102. break;
  103. case 22:
  104. { yylval.dynstr = ds(yytext); return UNSIGNED; }
  105. break;
  106. case 23:
  107. { yylval.dynstr = ds(yytext); return NAME; }
  108. break;
  109. case 24:
  110.     { yylval.dynstr = ds(yytext); return NUMBER; }
  111. break;
  112. case 25:
  113.     ;
  114. break;
  115. case 26:
  116.     return *yytext;
  117. break;
  118. case 27:
  119.         {
  120.                 printf("bad character '%s'\n",visible(*yytext));
  121.                 return *yytext;
  122.             }
  123. break;
  124. case -1:
  125. break;
  126. default:
  127. fprintf(yyout,"bad switch yylook %d",nstr);
  128. } return(0); }
  129. /* end of yylex */
  130. char *
  131. visible(c)
  132. {
  133.     static char buf[5];
  134.  
  135.     c &= 0377;
  136.     if (isprint(c)) {
  137.         buf[0] = c;
  138.         buf[1] = '\0';
  139.     } else
  140.         sprintf(buf,"\\%02o",c);
  141.     return buf;
  142. }
  143. int yyvstop[] = {
  144. 0,
  145.  
  146. 27,
  147. 0,
  148.  
  149. 25,
  150. 27,
  151. 0,
  152.  
  153. 26,
  154. 0,
  155.  
  156. 26,
  157. 27,
  158. 0,
  159.  
  160. 24,
  161. 27,
  162. 0,
  163.  
  164. 23,
  165. 27,
  166. 0,
  167.  
  168. 23,
  169. 27,
  170. 0,
  171.  
  172. 23,
  173. 27,
  174. 0,
  175.  
  176. 23,
  177. 27,
  178. 0,
  179.  
  180. 23,
  181. 27,
  182. 0,
  183.  
  184. 23,
  185. 27,
  186. 0,
  187.  
  188. 23,
  189. 27,
  190. 0,
  191.  
  192. 23,
  193. 27,
  194. 0,
  195.  
  196. 23,
  197. 27,
  198. 0,
  199.  
  200. 23,
  201. 27,
  202. 0,
  203.  
  204. 23,
  205. 27,
  206. 0,
  207.  
  208. 23,
  209. 27,
  210. 0,
  211.  
  212. 23,
  213. 27,
  214. 0,
  215.  
  216. 23,
  217. 27,
  218. 0,
  219.  
  220. 23,
  221. 27,
  222. 0,
  223.  
  224. 24,
  225. 0,
  226.  
  227. 23,
  228. 0,
  229.  
  230. 23,
  231. 0,
  232.  
  233. 2,
  234. 23,
  235. 0,
  236.  
  237. 23,
  238. 0,
  239.  
  240. 23,
  241. 0,
  242.  
  243. 23,
  244. 0,
  245.  
  246. 23,
  247. 0,
  248.  
  249. 23,
  250. 0,
  251.  
  252. 23,
  253. 0,
  254.  
  255. 23,
  256. 0,
  257.  
  258. 23,
  259. 0,
  260.  
  261. 23,
  262. 0,
  263.  
  264. 23,
  265. 0,
  266.  
  267. 23,
  268. 0,
  269.  
  270. 9,
  271. 23,
  272. 0,
  273.  
  274. 23,
  275. 0,
  276.  
  277. 23,
  278. 0,
  279.  
  280. 23,
  281. 0,
  282.  
  283. 23,
  284. 0,
  285.  
  286. 12,
  287. 23,
  288. 0,
  289.  
  290. 23,
  291. 0,
  292.  
  293. 23,
  294. 0,
  295.  
  296. 23,
  297. 0,
  298.  
  299. 23,
  300. 0,
  301.  
  302. 23,
  303. 0,
  304.  
  305. 23,
  306. 0,
  307.  
  308. 23,
  309. 0,
  310.  
  311. 23,
  312. 0,
  313.  
  314. 23,
  315. 0,
  316.  
  317. 23,
  318. 0,
  319.  
  320. 23,
  321. 0,
  322.  
  323. 17,
  324. 23,
  325. 0,
  326.  
  327. 23,
  328. 0,
  329.  
  330. 23,
  331. 0,
  332.  
  333. 23,
  334. 0,
  335.  
  336. 23,
  337. 0,
  338.  
  339. 23,
  340. 0,
  341.  
  342. 23,
  343. 0,
  344.  
  345. 23,
  346. 0,
  347.  
  348. 23,
  349. 0,
  350.  
  351. 3,
  352. 23,
  353. 0,
  354.  
  355. 13,
  356. 23,
  357. 0,
  358.  
  359. 23,
  360. 0,
  361.  
  362. 23,
  363. 0,
  364.  
  365. 15,
  366. 23,
  367. 0,
  368.  
  369. 23,
  370. 0,
  371.  
  372. 23,
  373. 0,
  374.  
  375. 23,
  376. 0,
  377.  
  378. 7,
  379. 23,
  380. 0,
  381.  
  382. 8,
  383. 23,
  384. 0,
  385.  
  386. 18,
  387. 23,
  388. 0,
  389.  
  390. 23,
  391. 0,
  392.  
  393. 23,
  394. 0,
  395.  
  396. 23,
  397. 0,
  398.  
  399. 23,
  400. 0,
  401.  
  402. 23,
  403. 0,
  404.  
  405. 23,
  406. 0,
  407.  
  408. 1,
  409. 23,
  410. 0,
  411.  
  412. 23,
  413. 0,
  414.  
  415. 23,
  416. 0,
  417.  
  418. 23,
  419. 0,
  420.  
  421. 16,
  422. 23,
  423. 0,
  424.  
  425. 23,
  426. 0,
  427.  
  428. 23,
  429. 0,
  430.  
  431. 23,
  432. 0,
  433.  
  434. 19,
  435. 23,
  436. 0,
  437.  
  438. 23,
  439. 0,
  440.  
  441. 21,
  442. 23,
  443. 0,
  444.  
  445. 23,
  446. 0,
  447.  
  448. 23,
  449. 0,
  450.  
  451. 14,
  452. 23,
  453. 0,
  454.  
  455. 23,
  456. 0,
  457.  
  458. 23,
  459. 0,
  460.  
  461. 23,
  462. 0,
  463.  
  464. 23,
  465. 0,
  466.  
  467. 20,
  468. 23,
  469. 0,
  470.  
  471. 23,
  472. 0,
  473.  
  474. 4,
  475. 23,
  476. 0,
  477.  
  478. 5,
  479. 23,
  480. 0,
  481.  
  482. 23,
  483. 0,
  484.  
  485. 10,
  486. 23,
  487. 0,
  488.  
  489. 23,
  490. 0,
  491.  
  492. 23,
  493. 0,
  494.  
  495. 6,
  496. 23,
  497. 0,
  498.  
  499. 23,
  500. 0,
  501.  
  502. 22,
  503. 23,
  504. 0,
  505.  
  506. 11,
  507. 23,
  508. 0,
  509. 0};
  510. # define YYTYPE char
  511. struct yywork { YYTYPE verify, advance; } yycrank[] = {
  512. 0,0,    0,0,    1,3,    0,0,    
  513. 0,0,    0,0,    0,0,    0,0,    
  514. 0,0,    0,0,    1,4,    1,5,    
  515. 0,0,    0,0,    0,0,    0,0,    
  516. 0,0,    0,0,    0,0,    0,0,    
  517. 0,0,    0,0,    0,0,    0,0,    
  518. 0,0,    0,0,    0,0,    0,0,    
  519. 0,0,    0,0,    0,0,    0,0,    
  520. 0,0,    0,0,    0,0,    0,0,    
  521. 0,0,    0,0,    0,0,    0,0,    
  522. 0,0,    1,6,    0,0,    0,0,    
  523. 0,0,    0,0,    0,0,    0,0,    
  524. 0,0,    1,7,    7,23,    7,23,    
  525. 7,23,    7,23,    7,23,    7,23,    
  526. 7,23,    7,23,    7,23,    7,23,    
  527. 0,0,    0,0,    0,0,    0,0,    
  528. 0,0,    0,0,    1,8,    0,0,    
  529. 0,0,    0,0,    0,0,    0,0,    
  530. 0,0,    0,0,    0,0,    0,0,    
  531. 0,0,    0,0,    0,0,    0,0,    
  532. 0,0,    0,0,    0,0,    0,0,    
  533. 0,0,    0,0,    0,0,    0,0,    
  534. 0,0,    0,0,    0,0,    0,0,    
  535. 0,0,    0,0,    0,0,    0,0,    
  536. 0,0,    0,0,    1,9,    0,0,    
  537. 1,10,    1,11,    1,12,    1,13,    
  538. 10,27,    1,14,    1,15,    14,35,    
  539. 17,38,    1,16,    11,29,    10,28,    
  540. 1,17,    1,18,    15,36,    1,19,    
  541. 1,20,    1,21,    1,22,    2,9,    
  542. 11,30,    2,10,    2,11,    2,12,    
  543. 2,13,    12,31,    2,14,    2,15,    
  544. 9,25,    9,26,    2,16,    16,37,    
  545. 18,39,    2,17,    2,18,    12,32,    
  546. 2,19,    2,20,    2,21,    2,22,    
  547. 8,24,    8,24,    8,24,    8,24,    
  548. 8,24,    8,24,    8,24,    8,24,    
  549. 8,24,    8,24,    19,40,    21,43,    
  550. 22,44,    25,45,    27,46,    28,47,    
  551. 29,48,    8,24,    8,24,    8,24,    
  552. 8,24,    8,24,    8,24,    8,24,    
  553. 8,24,    8,24,    8,24,    8,24,    
  554. 8,24,    8,24,    8,24,    8,24,    
  555. 8,24,    8,24,    8,24,    8,24,    
  556. 8,24,    8,24,    8,24,    8,24,    
  557. 8,24,    8,24,    8,24,    30,49,    
  558. 31,50,    32,51,    33,52,    8,24,    
  559. 34,53,    8,24,    8,24,    8,24,    
  560. 8,24,    8,24,    8,24,    8,24,    
  561. 8,24,    8,24,    8,24,    8,24,    
  562. 8,24,    8,24,    8,24,    8,24,    
  563. 8,24,    8,24,    8,24,    8,24,    
  564. 8,24,    8,24,    8,24,    8,24,    
  565. 8,24,    8,24,    8,24,    13,33,    
  566. 20,41,    35,54,    36,55,    37,56,    
  567. 39,57,    40,58,    41,59,    42,60,    
  568. 13,34,    44,61,    45,63,    46,64,    
  569. 20,42,    47,65,    48,66,    49,67,    
  570. 50,68,    51,69,    52,70,    44,62,    
  571. 53,71,    54,72,    55,73,    56,74,    
  572. 57,75,    58,76,    59,77,    60,78,    
  573. 61,79,    62,80,    63,81,    66,82,    
  574. 67,83,    69,84,    70,85,    71,86,    
  575. 75,87,    76,88,    77,89,    78,90,    
  576. 79,91,    80,92,    82,93,    83,94,    
  577. 84,95,    86,96,    87,97,    88,98,    
  578. 90,99,    92,100,    93,101,    95,102,    
  579. 96,103,    97,104,    98,105,    100,106,    
  580. 103,107,    105,108,    106,109,    108,110,    
  581. 0,0};
  582. struct yysvf yysvec[] = {
  583. 0,    0,    0,
  584. yycrank+-1,    0,        0,    
  585. yycrank+-22,    yysvec+1,    0,    
  586. yycrank+0,    0,        yyvstop+1,
  587. yycrank+0,    0,        yyvstop+3,
  588. yycrank+0,    0,        yyvstop+6,
  589. yycrank+0,    0,        yyvstop+8,
  590. yycrank+2,    0,        yyvstop+11,
  591. yycrank+92,    0,        yyvstop+14,
  592. yycrank+14,    yysvec+8,    yyvstop+17,
  593. yycrank+7,    yysvec+8,    yyvstop+20,
  594. yycrank+9,    yysvec+8,    yyvstop+23,
  595. yycrank+15,    yysvec+8,    yyvstop+26,
  596. yycrank+107,    yysvec+8,    yyvstop+29,
  597. yycrank+6,    yysvec+8,    yyvstop+32,
  598. yycrank+4,    yysvec+8,    yyvstop+35,
  599. yycrank+20,    yysvec+8,    yyvstop+38,
  600. yycrank+6,    yysvec+8,    yyvstop+41,
  601. yycrank+21,    yysvec+8,    yyvstop+44,
  602. yycrank+49,    yysvec+8,    yyvstop+47,
  603. yycrank+112,    yysvec+8,    yyvstop+50,
  604. yycrank+40,    yysvec+8,    yyvstop+53,
  605. yycrank+42,    yysvec+8,    yyvstop+56,
  606. yycrank+0,    yysvec+7,    yyvstop+59,
  607. yycrank+0,    yysvec+8,    yyvstop+61,
  608. yycrank+39,    yysvec+8,    yyvstop+63,
  609. yycrank+0,    yysvec+8,    yyvstop+65,
  610. yycrank+39,    yysvec+8,    yyvstop+68,
  611. yycrank+58,    yysvec+8,    yyvstop+70,
  612. yycrank+57,    yysvec+8,    yyvstop+72,
  613. yycrank+66,    yysvec+8,    yyvstop+74,
  614. yycrank+67,    yysvec+8,    yyvstop+76,
  615. yycrank+73,    yysvec+8,    yyvstop+78,
  616. yycrank+75,    yysvec+8,    yyvstop+80,
  617. yycrank+78,    yysvec+8,    yyvstop+82,
  618. yycrank+109,    yysvec+8,    yyvstop+84,
  619. yycrank+102,    yysvec+8,    yyvstop+86,
  620. yycrank+109,    yysvec+8,    yyvstop+88,
  621. yycrank+0,    yysvec+8,    yyvstop+90,
  622. yycrank+115,    yysvec+8,    yyvstop+93,
  623. yycrank+105,    yysvec+8,    yyvstop+95,
  624. yycrank+111,    yysvec+8,    yyvstop+97,
  625. yycrank+109,    yysvec+8,    yyvstop+99,
  626. yycrank+0,    yysvec+8,    yyvstop+101,
  627. yycrank+120,    yysvec+8,    yyvstop+104,
  628. yycrank+129,    yysvec+8,    yyvstop+106,
  629. yycrank+111,    yysvec+8,    yyvstop+108,
  630. yycrank+115,    yysvec+8,    yyvstop+110,
  631. yycrank+122,    yysvec+8,    yyvstop+112,
  632. yycrank+133,    yysvec+8,    yyvstop+114,
  633. yycrank+123,    yysvec+8,    yyvstop+116,
  634. yycrank+125,    yysvec+8,    yyvstop+118,
  635. yycrank+137,    yysvec+8,    yyvstop+120,
  636. yycrank+137,    yysvec+8,    yyvstop+122,
  637. yycrank+125,    yysvec+8,    yyvstop+124,
  638. yycrank+127,    yysvec+8,    yyvstop+126,
  639. yycrank+136,    yysvec+8,    yyvstop+129,
  640. yycrank+130,    yysvec+8,    yyvstop+131,
  641. yycrank+124,    yysvec+8,    yyvstop+133,
  642. yycrank+128,    yysvec+8,    yyvstop+135,
  643. yycrank+126,    yysvec+8,    yyvstop+137,
  644. yycrank+133,    yysvec+8,    yyvstop+139,
  645. yycrank+140,    yysvec+8,    yyvstop+141,
  646. yycrank+125,    yysvec+8,    yyvstop+143,
  647. yycrank+0,    yysvec+8,    yyvstop+145,
  648. yycrank+0,    yysvec+8,    yyvstop+148,
  649. yycrank+150,    yysvec+8,    yyvstop+151,
  650. yycrank+140,    yysvec+8,    yyvstop+153,
  651. yycrank+0,    yysvec+8,    yyvstop+155,
  652. yycrank+152,    yysvec+8,    yyvstop+158,
  653. yycrank+134,    yysvec+8,    yyvstop+160,
  654. yycrank+135,    yysvec+8,    yyvstop+162,
  655. yycrank+0,    yysvec+8,    yyvstop+164,
  656. yycrank+0,    yysvec+8,    yyvstop+167,
  657. yycrank+0,    yysvec+8,    yyvstop+170,
  658. yycrank+136,    yysvec+8,    yyvstop+173,
  659. yycrank+139,    yysvec+8,    yyvstop+175,
  660. yycrank+138,    yysvec+8,    yyvstop+177,
  661. yycrank+156,    yysvec+8,    yyvstop+179,
  662. yycrank+146,    yysvec+8,    yyvstop+181,
  663. yycrank+154,    yysvec+8,    yyvstop+183,
  664. yycrank+0,    yysvec+8,    yyvstop+185,
  665. yycrank+144,    yysvec+8,    yyvstop+188,
  666. yycrank+158,    yysvec+8,    yyvstop+190,
  667. yycrank+155,    yysvec+8,    yyvstop+192,
  668. yycrank+0,    yysvec+8,    yyvstop+194,
  669. yycrank+156,    yysvec+8,    yyvstop+197,
  670. yycrank+161,    yysvec+8,    yyvstop+199,
  671. yycrank+153,    yysvec+8,    yyvstop+201,
  672. yycrank+0,    yysvec+8,    yyvstop+203,
  673. yycrank+148,    yysvec+8,    yyvstop+206,
  674. yycrank+0,    yysvec+8,    yyvstop+208,
  675. yycrank+155,    yysvec+8,    yyvstop+211,
  676. yycrank+165,    yysvec+8,    yyvstop+213,
  677. yycrank+0,    yysvec+8,    yyvstop+215,
  678. yycrank+157,    yysvec+8,    yyvstop+218,
  679. yycrank+157,    yysvec+8,    yyvstop+220,
  680. yycrank+155,    yysvec+8,    yyvstop+222,
  681. yycrank+165,    yysvec+8,    yyvstop+224,
  682. yycrank+0,    yysvec+8,    yyvstop+226,
  683. yycrank+170,    yysvec+8,    yyvstop+229,
  684. yycrank+0,    yysvec+8,    yyvstop+231,
  685. yycrank+0,    yysvec+8,    yyvstop+234,
  686. yycrank+162,    yysvec+8,    yyvstop+237,
  687. yycrank+0,    yysvec+8,    yyvstop+239,
  688. yycrank+163,    yysvec+8,    yyvstop+242,
  689. yycrank+174,    yysvec+8,    yyvstop+244,
  690. yycrank+0,    yysvec+8,    yyvstop+246,
  691. yycrank+172,    yysvec+8,    yyvstop+249,
  692. yycrank+0,    yysvec+8,    yyvstop+251,
  693. yycrank+0,    yysvec+8,    yyvstop+254,
  694. 0,    0,    0};
  695. struct yywork *yytop = yycrank+275;
  696. struct yysvf *yybgin = yysvec+1;
  697. char yymatch[] = {
  698. 00  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  699. 01  ,011 ,012 ,01  ,01  ,01  ,01  ,01  ,
  700. 01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  701. 01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  702. 011 ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  703. '(' ,'(' ,'(' ,01  ,01  ,01  ,01  ,01  ,
  704. '0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,
  705. '0' ,'0' ,01  ,01  ,01  ,01  ,01  ,01  ,
  706. 01  ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  707. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  708. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  709. 'A' ,'A' ,'A' ,'(' ,01  ,'(' ,01  ,'A' ,
  710. 01  ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  711. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  712. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  713. 'A' ,'A' ,'A' ,01  ,01  ,01  ,01  ,01  ,
  714. 0};
  715. char yyextra[] = {
  716. 0,0,0,0,0,0,0,0,
  717. 0,0,0,0,0,0,0,0,
  718. 0,0,0,0,0,0,0,0,
  719. 0,0,0,0,0,0,0,0,
  720. 0};
  721. /* #ident    "@(#)libl:lib/ncform    1.3" */
  722. int yylineno =1;
  723. # define YYU(x) x
  724. # define NLSTATE yyprevious=YYNEWLINE
  725. char yytext[YYLMAX];
  726. struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
  727. char yysbuf[YYLMAX];
  728. char *yysptr = yysbuf;
  729. int *yyfnd;
  730. extern struct yysvf *yyestate;
  731. int yyprevious = YYNEWLINE;
  732. yylook(){
  733.     register struct yysvf *yystate, **lsp;
  734.     register struct yywork *yyt;
  735.     struct yysvf *yyz;
  736.     int yych, yyfirst;
  737.     struct yywork *yyr;
  738. # ifdef LEXDEBUG
  739.     int debug;
  740. # endif
  741.     char *yylastch;
  742.     /* start off machines */
  743. # ifdef LEXDEBUG
  744.     debug = 0;
  745. # endif
  746.     yyfirst=1;
  747.     if (!yymorfg)
  748.         yylastch = yytext;
  749.     else {
  750.         yymorfg=0;
  751.         yylastch = yytext+yyleng;
  752.         }
  753.     for(;;){
  754.         lsp = yylstate;
  755.         yyestate = yystate = yybgin;
  756.         if (yyprevious==YYNEWLINE) yystate++;
  757.         for (;;){
  758. # ifdef LEXDEBUG
  759.             if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
  760. # endif
  761.             yyt = yystate->yystoff;
  762.             if(yyt == yycrank && !yyfirst){  /* may not be any transitions */
  763.                 yyz = yystate->yyother;
  764.                 if(yyz == 0)break;
  765.                 if(yyz->yystoff == yycrank)break;
  766.                 }
  767.             *yylastch++ = yych = input();
  768.             yyfirst=0;
  769.         tryagain:
  770. # ifdef LEXDEBUG
  771.             if(debug){
  772.                 fprintf(yyout,"char ");
  773.                 allprint(yych);
  774.                 putchar('\n');
  775.                 }
  776. # endif
  777.             yyr = yyt;
  778.             if ( (int)yyt > (int)yycrank){
  779.                 yyt = yyr + yych;
  780.                 if (yyt <= yytop && yyt->verify+yysvec == yystate){
  781.                     if(yyt->advance+yysvec == YYLERR)    /* error transitions */
  782.                         {unput(*--yylastch);break;}
  783.                     *lsp++ = yystate = yyt->advance+yysvec;
  784.                     goto contin;
  785.                     }
  786.                 }
  787. # ifdef YYOPTIM
  788.             else if((int)yyt < (int)yycrank) {        /* r < yycrank */
  789.                 yyt = yyr = yycrank+(yycrank-yyt);
  790. # ifdef LEXDEBUG
  791.                 if(debug)fprintf(yyout,"compressed state\n");
  792. # endif
  793.                 yyt = yyt + yych;
  794.                 if(yyt <= yytop && yyt->verify+yysvec == yystate){
  795.                     if(yyt->advance+yysvec == YYLERR)    /* error transitions */
  796.                         {unput(*--yylastch);break;}
  797.                     *lsp++ = yystate = yyt->advance+yysvec;
  798.                     goto contin;
  799.                     }
  800.                 yyt = yyr + YYU(yymatch[yych]);
  801. # ifdef LEXDEBUG
  802.                 if(debug){
  803.                     fprintf(yyout,"try fall back character ");
  804.                     allprint(YYU(yymatch[yych]));
  805.                     putchar('\n');
  806.                     }
  807. # endif
  808.                 if(yyt <= yytop && yyt->verify+yysvec == yystate){
  809.                     if(yyt->advance+yysvec == YYLERR)    /* error transition */
  810.                         {unput(*--yylastch);break;}
  811.                     *lsp++ = yystate = yyt->advance+yysvec;
  812.                     goto contin;
  813.                     }
  814.                 }
  815.             if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
  816. # ifdef LEXDEBUG
  817.                 if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
  818. # endif
  819.                 goto tryagain;
  820.                 }
  821. # endif
  822.             else
  823.                 {unput(*--yylastch);break;}
  824.         contin:
  825. # ifdef LEXDEBUG
  826.             if(debug){
  827.                 fprintf(yyout,"state %d char ",yystate-yysvec-1);
  828.                 allprint(yych);
  829.                 putchar('\n');
  830.                 }
  831. # endif
  832.             ;
  833.             }
  834. # ifdef LEXDEBUG
  835.         if(debug){
  836.             fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
  837.             allprint(yych);
  838.             putchar('\n');
  839.             }
  840. # endif
  841.         while (lsp-- > yylstate){
  842.             *yylastch-- = 0;
  843.             if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
  844.                 yyolsp = lsp;
  845.                 if(yyextra[*yyfnd]){        /* must backup */
  846.                     while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
  847.                         lsp--;
  848.                         unput(*yylastch--);
  849.                         }
  850.                     }
  851.                 yyprevious = YYU(*yylastch);
  852.                 yylsp = lsp;
  853.                 yyleng = yylastch-yytext+1;
  854.                 yytext[yyleng] = 0;
  855. # ifdef LEXDEBUG
  856.                 if(debug){
  857.                     fprintf(yyout,"\nmatch ");
  858.                     sprint(yytext);
  859.                     fprintf(yyout," action %d\n",*yyfnd);
  860.                     }
  861. # endif
  862.                 return(*yyfnd++);
  863.                 }
  864.             unput(*yylastch);
  865.             }
  866.         if (yytext[0] == 0  /* && feof(yyin) */)
  867.             {
  868.             yysptr=yysbuf;
  869.             return(0);
  870.             }
  871.         yyprevious = yytext[0] = input();
  872.         if (yyprevious>0)
  873.             output(yyprevious);
  874.         yylastch=yytext;
  875. # ifdef LEXDEBUG
  876.         if(debug)putchar('\n');
  877. # endif
  878.         }
  879.     }
  880. yyback(p, m)
  881.     int *p;
  882. {
  883. if (p==0) return(0);
  884. while (*p)
  885.     {
  886.     if (*p++ == m)
  887.         return(1);
  888.     }
  889. return(0);
  890. }
  891.     /* the following are only used in the lex library */
  892. yyinput(){
  893.     return(input());
  894.     }
  895. yyoutput(c)
  896.   int c; {
  897.     output(c);
  898.     }
  899. yyunput(c)
  900.    int c; {
  901.     unput(c);
  902.     }
  903.